import crypto from 'crypto';

/**
 * 为匿名用户生成虚拟用户ID
 * 格式: anon_<roomId>_<hash(userName)>
 *
 * @param roomId 直播间ID
 * @param userName 用户昵称
 * @returns 虚拟用户ID
 */
export function generateAnonymousUserId(roomId: string, userName: string): string {
  // 使用MD5哈希用户名（取前12位）
  const hash = crypto
    .createHash('md5')
    .update(userName)
    .digest('hex')
    .substring(0, 12);

  return `anon_${roomId}_${hash}`;
}

/**
 * 检查是否为匿名用户ID
 * @param userId 用户ID
 * @returns 是否为匿名用户
 */
export function isAnonymousUserId(userId: string): boolean {
  return userId.startsWith('anon_');
}

/**
 * 从虚拟ID中提取房间ID
 * @param anonymousUserId 匿名用户ID
 * @returns 房间ID，如果不是匿名ID则返回null
 */
export function extractRoomIdFromAnonymousUserId(anonymousUserId: string): string | null {
  if (!isAnonymousUserId(anonymousUserId)) return null;

  const parts = anonymousUserId.split('_');
  return parts.length >= 3 ? parts[1] : null;
}

/**
 * 确保用户有ID（如果没有则生成虚拟ID）
 * @param user 用户信息
 * @param roomId 直播间ID
 * @returns 用户ID
 */
export function ensureUserId(user: any, roomId: string): string {
  // 如果有ID，直接返回
  if (user?.id) {
    return user.id;
  }

  // 如果没有ID但有name，生成虚拟ID
  if (user?.name) {
    return generateAnonymousUserId(roomId, user.name);
  }

  // 如果连name都没有，使用时间戳生成唯一ID
  return generateAnonymousUserId(roomId, `unknown_${Date.now()}`);
}
